<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    div {
      width: 200px;
      height: 200px;
      background: red;
      position: absolute;
      left: 0;
      top: 30px;
    }
  </style>
</head>
<body>
  <button>向右</button>
  <button>向左</button>
  <button>向上</button>
  <button>向下</button>
  <div></div>
  <script>
    // 四个按钮分别控制元素上下左右移动，如果超出浏览器范围则运动停止
    // 提示：window.innerHeight 和 window.innerWidth获取浏览器宽高

    var btns = document.querySelectorAll('button')
    var oDiv = document.querySelector('div')
    var maxLeft = window.innerWidth - oDiv.offsetWidth
    var maxTop = window.innerHeight - oDiv.offsetHeight
    var timer = null

    // 向右
    btns[0].onclick = function () {
      // 开启一个定时器之前先把timer清除一次
      clearInterval(timer)
      timer = setInterval(function () {
        console.log(123)
        var left = oDiv.offsetLeft + 10
        oDiv.style.left = left + 'px'
        if (left >= maxLeft) {
          clearInterval(timer)
          // 这里有可能会超出几像素，强制拉回来
          oDiv.style.left = maxLeft + 'px'
        }
      }, 30)
    }
    // 向左
    btns[1].onclick = function () {
      // 开启一个定时器之前先把timer清除一次
      clearInterval(timer)
      timer = setInterval(function () {
        var left = oDiv.offsetLeft - 10
        oDiv.style.left = left + 'px'
        if (left <= 0) {
          clearInterval(timer)
          // 这里有可能会超出几像素，强制拉回来
          oDiv.style.left = 0 + 'px'
        }
      }, 30)
    }

    // 向下
    btns[3].onclick = function () {
      // 开启一个定时器之前先把timer清除一次
      clearInterval(timer)
      timer = setInterval(function () {
        console.log(123)
        var top = oDiv.offsetTop + 10
        oDiv.style.top = top + 'px'
        if (top >= maxTop) {
          clearInterval(timer)
          // 这里有可能会超出几像素，强制拉回来
          oDiv.style.top = maxTop + 'px'
        }
      }, 30)
    }
    // 向上
    btns[2].onclick = function () {
      // 开启一个定时器之前先把timer清除一次
      clearInterval(timer)
      timer = setInterval(function () {
        var top = oDiv.offsetTop - 10
        oDiv.style.top = top + 'px'
        if (top <= 30) {
          clearInterval(timer)
          // 这里有可能会超出几像素，强制拉回来
          oDiv.style.top = 30 + 'px'
        }
      }, 30)
    }    
    
  </script>
</body>
</html>